function floodFill(mapData, x, y, oldVal, newVal){
    var mapWidth = mapData.length,
        mapHeight = mapData[0].length;

        if(oldVal == null){
            oldVal=mapData[x][y];
        }

        if(mapData[x][y] !== oldVal){
            return true;
        }

    mapData[x][y] = newVal;

    if (x > 0){ // left
        floodFill(mapData, x-1, y, oldVal, newVal);
    }
    if(y > 0){ // up
        floodFill(mapData, x, y-1, oldVal, newVal);
    }
    if(x < mapWidth-1){ // right
        floodFill(mapData, x+1, y, oldVal, newVal);
    }
    if(y < mapHeight-1){ // down
        floodFill(mapData, x, y+1, oldVal, newVal);
    }
}